package demo6;

import javax.swing.tree.TreeNode;

/**
 * Created with IntelliJ IDEA.
 * Description:中序遍历和后序遍历创建二叉树
 * User: liangyuanzhang
 * Date: 2025-4-29
 * Time: 22:43
 */
public class Test {


    public int postIndex;

    public TreeNode buildTree(int[] inorder, int[] postorder) {
        postIndex = postorder.length-1;
        return buildTreeChild(inorder, postorder, 0, inorder.length - 1);
    }

    public TreeNode buildTreeChild(int[] inorder, int[] postorder, int inbegin, int inend) {
        //这种情况下 表明 当前root 没有子树了
        if (inbegin > inend) {
            return null;
        }
        TreeNode root = new TreeNode(postorder[postIndex]);

        int rootIndex = findVal(inorder, inbegin, inend, postorder[postIndex]);
        postIndex--;
        //这里先右数再左数
        root.right = buildTreeChild(inorder, postorder, rootIndex + 1, inend);

        root.left = buildTreeChild(inorder, postorder, inbegin, rootIndex - 1);
        return root;
    }

    private int findVal(int[] inorder, int inbegin, int inend, int val) {
        for (int i = inbegin; i <= inend; i++) {
            if (inorder[i] == val) {
                return i;
            }
        }
        return -1;
    }


}
